跳到主要内容

问:为什么 tmp 的文件系统是tmpfs

这是个很好的问题。 一般 Linux 系统里 /tmp 目录挂载的文件系统类型是 tmpfs,主要原因如下:


1. 什么是 tmpfs

  • tmpfs 是一种基于内存的临时文件系统,它会把文件存放在内存(RAM)里,也可能交换到 swap 空间。
  • 它不像 ext4、xfs 那样需要磁盘存储,而是直接用内存空间。

2. 为什么 /tmp 常用 tmpfs

  • 速度快:内存的读写速度远远高于磁盘,程序在 /tmp 写临时文件会非常快。
  • 自动清理:系统重启时,tmpfs 中的数据会全部消失,符合 /tmp 目录「临时文件」的语义。
  • 节省磁盘 I/O:一些频繁写入 /tmp 的应用(浏览器、编译器等),如果写到磁盘,会增加 I/O 压力;用 tmpfs 可以避免磁盘被频繁读写。
  • 灵活大小:tmpfs 默认大小是物理内存的一部分(一般是内存的一半),不会无限制占用磁盘;需要时也能通过 mount -o size=xxx 限制大小。

3. 并不是所有系统都默认

  • 有些 Linux 发行版(比如 Ubuntu 18.04 以后、Fedora、Arch 等)会默认把 /tmp 挂载为 tmpfs
  • 但有些老版本(如 CentOS 6/7、RHEL 较老版本)仍然把 /tmp 放在磁盘上,需要手动调整。

4. 检查方法

你可以用下面的命令确认:

mount | grep /tmp

如果输出里是:

tmpfs on /tmp type tmpfs (rw,nosuid,nodev)

就说明 /tmp 使用的是 tmpfs。


👉 总结: /tmptmpfs 的主要原因是 性能高、临时性强、减少磁盘负担,而且符合「临时文件」的语义。

要不要我顺便给你讲一下 如何把 /tmp 从磁盘改成 tmpfs,或者相反,把 tmpfs 改回磁盘目录

问:这个配置是在哪里设置的

好问题 👍 决定 /tmp 是否使用 tmpfs,以及如何挂载的配置,取决于不同的 Linux 发行版和版本,主要有以下几个地方:


1. systemd 的 tmp.mount 单元

在大多数现代 Linux(如 Ubuntu 18.04+、Fedora、Arch 等)里,/tmp 是否挂载为 tmpfs 是由 systemd 控制的:

  • 配置文件路径:

    /usr/lib/systemd/system/tmp.mount

    或者覆盖配置:

    /etc/systemd/system/tmp.mount
  • 内容类似:

    [Unit]
    Description=Temporary Directory (/tmp)
    Documentation=man:hier(7)
    Documentation=man:tmpfs(5)

    [Mount]
    What=tmpfs
    Where=/tmp
    Type=tmpfs
    Options=mode=1777,strictatime,nosuid,nodev

    [Install]
    WantedBy=local-fs.target
  • 查看是否启用:

    systemctl status tmp.mount
  • 如果你想禁用 tmpfs 挂载 /tmp

    sudo systemctl mask tmp.mount
    sudo reboot

2. /etc/fstab

有些系统不用 systemdtmp.mount,而是直接在 /etc/fstab 里配置:

  • 查看:

    cat /etc/fstab | grep /tmp
  • 如果有类似:

    tmpfs   /tmp    tmpfs   defaults,noatime,mode=1777   0  0

    就说明 /tmp 是通过 fstab 设置为 tmpfs。

  • 要改回磁盘目录,可以删掉这一行并重启。


3. 发行版特有的机制

  • Debian / Ubuntu(systemd 版本):默认用 tmp.mount;老版本有时是 fstab
  • RHEL / CentOS 7:默认 /tmp 在磁盘;管理员可在 /etc/systemd/system 建立 tmp.mount
  • openSUSE:通常也是 systemd-tmpfiles 控制。

总结:

  • systemd 系统:主要看 tmp.mount
  • 非 systemd 或老版本:主要看 /etc/fstab

要不要我帮你写一份 检查和修改 /tmp 是否用 tmpfs 的完整步骤脚本?这样你在任意 Linux 上都能一键确认和修改。